package dao;

/**
 * Esta es una implementaci�n espec�fica de la interface CarreraDAO, para 
 * gestionar la persistencia de objetos Carrera a trav�s de MySQL. La clase 
 * contiene todo el c�digo espec�fico para MySQL y las instrucciones SQL 
 * necesarias. Los detalles de acceso espec�ficos del motor, quedan entonces 
 * ocultos a los clientes de esta clase.
 * @author Ing. Valerio Frittelli.
 * @version Abril de 2010
 */

import datos.Jugador;
import datos.Objetivo;
import java.sql.*;
import java.util.*;
public class MySqlObjetivoDAO implements ObjetivoDAO
{
      // atributo para gestionar la conexi�n a la base (y la base misma)
      private Connection con;
      
      // atributo para gestionar instrucciones SQL
      private Statement st;

      /**
       * Crea un objeto con valores default.
       */
      public MySqlObjetivoDAO()
      {           
      }
    
    
      /**
       * Busca una Carrera en la base de datos. 
       * @param objetivo el objeto cuyo c�digo ser� buscado en la base.
       * @return un objeto Carrera con los datos recuperados de la base, cuyo c�digo coincide con 
       * el del par�metro, o null si tal c�digo no existe en la base.
       */
    @Override
      public Objetivo find( Objetivo objetivo )
      {

          MySqlDAOFactory mdf = ( MySqlDAOFactory )DAOFactory.getDAOFactory( DAOFactory.MYSQL );
            con = mdf.createConnection();
            String s = "SELECT Descripcion, paisesAmericaNorte, paisesAmericaSur, paisesEuropa,"
                    + " paisesAsia, paisesAfrica, paisesOceania "
                    + "FROM objetivo    WHERE idObjetivo = "+ objetivo.getCodigo();
            Objetivo to = null;
            ResultSet res = null;
            try
            {

                // crear un manejador SQL y ejecutar la instrucci�n...
                st = con.createStatement();
                st.execute( s );
                res = st.getResultSet();
                if( res.next() )
                {
                   String descripcion = res.getString( "descripcion" );
                   int cantPaisAN = res.getInt( "paisesAmericaNorte" );
                   int cantPaisAS = res.getInt( "paisesAmericaSur" );
                   int cantPaisE = res.getInt( "paisesEuropa" );
                   int cantPaisAsia = res.getInt( "paisesAsia" );
                   int cantPaisAfrica = res.getInt( "paisesAfrica" );
                   int cantPaisO = res.getInt( "paisesOceania" );

                   // crear un objeto que transporte esos datos...
                   to = new Objetivo(descripcion,cantPaisAN, cantPaisAS, cantPaisE, cantPaisAsia, cantPaisAfrica, cantPaisO, null);
                }

          }
          catch( SQLException e )
          {
               System.out.println("Error al buscar un Alumno en la Base: " + e.getMessage());
          }

          close();
          return to;


          // abrir la base de datos...
//          MySqlDAOFactory adf = ( MySqlDAOFactory )DAOFactory.getDAOFactory( DAOFactory.MYSQL );
//          con = adf.createConnection();
//
//          // recuperar el valor del legajo del Alumno a borrar...
//          int cod = objetivo.getCodigo();     // c�digo de la carrera
//
//          // armar la instrucci�n...
//          Objetivo to = null;
//          ResultSet res = null;
//          String s = "select * from objetivo where codigo = " + cod;
//
//          try
//          {
//                // crear un manejador SQL y ejecutar la instrucci�n...
//                st = con.createStatement();
//                st.execute( s );
//                res = st.getResultSet();
//                if( res.next() )
//                {
//                   String descripcion = res.getString( "nombre" );
//
//                   // crear un objeto que transporte esos datos...
//                   to = new Objetivo( cod, descripcion );
//                }
//
//          }
//          catch( SQLException e )
//          {
//               System.out.println("Error al buscar una Carrera en la Base: " + e.getMessage());
//          }
//
//          close();
//          return to;
      }
            
      /**
       * Recupera todas las carreras registradas en la Base. El conjunto 
       * retornado puede salir vac�o si la Base no contiene ninguna carrera
       * registrada.
       * @return un conjunto con datos de todas las carreras de la Base, 
       * o null si hubo alg�n problema al recuperar los datos.
       */
      public Collection < Objetivo > list()
      {
          // abrir la base de datos...
//          MySqlDAOFactory adf = ( MySqlDAOFactory )DAOFactory.getDAOFactory( DAOFactory.MYSQL );
//          con = adf.createConnection();
//
//          // preparar la estructura de datos de salida..
          ArrayList < Objetivo > out = null;
//
//          // armar la instrucci�n...
//          ResultSet res = null;
//          String s = "select * from Carrera";
//
//          try
//          {
//                // crear un manejador SQL y ejecutar la instrucci�n...
//                st = con.createStatement();
//                st.execute( s );
//
//                // recorrer el conjunto de resultados obtenido desde la Base
//                out = new ArrayList < Carrera > ();
//                res = st.getResultSet();
//                while( res.next() )
//                {
//                   // datos de la carrera, tal como vienen de la base...
//                   int cod = res.getInt( "codigo" );
//                   String nom = res.getString( "nombre" );
//
//                   // crear un objeto con esos datos, y agregarlo a la lista de salida
//                   out.add( new Carrera( cod, nom ) );
//                }
//
//          }
//          catch( SQLException e )
//          {
//               System.out.println("Error al buscar una Carrera en la Base: " + e.getMessage());
//          }
//
//          close();
          return out;
      }
      
      // cierra la conexi�n
      private void close()
      {
          try
          {
             con.close();
          }
          catch( Exception e )
          {
             System.out.println( "Error al cerrar la conexi�n: "  + e.getMessage() ) ;  
          }
      }
}
